//package com.dotflat.fin.utils;
//
//import cn.enilu.flash.pay.common.PayUrl;
//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
//import okhttp3.*;
//import org.apache.commons.lang3.StringUtils;
//import org.jdom2.JDOMException;
//
//import java.io.IOException;
//import java.net.URLDecoder;
//import java.util.*;
//
//public class WxOrderUtils {
//
////    public WxPayMpOrderResult createWxOrder(String openId, String outTradeNo, int price, String body, String attach, String wxNotifyURL, WxPayService service ) throws WxPayException, JSONException {
////
////        //请求远程订单
////        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = null;
////        try {
////            wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder()
////                    .openid(openId)
////                    .outTradeNo(outTradeNo)
////                    .totalFee(price)
////                    .body(URLDecoder.decode(body, "utf-8"))
////                    .tradeType(Const.PAY_WECHAT_TRADE_TYPE)
////                    .spbillCreateIp(WxToolUtil.getIpAddress())
////                    .attach(attach)
////                    .notifyUrl(wxNotifyURL)
////                    .build();
////        } catch (UnsupportedEncodingException e) {
////            e.printStackTrace();
////        }
////
////        WxPayMpOrderResult wxPayAppOrderResult = service.createOrder(wxPayUnifiedOrderRequest);
////
////        return wxPayAppOrderResult;
////    }
//
//    public static SortedMap unifierOrderRequest(SortedMap<String, Object> param, String security) throws IOException, JDOMException {
//        // 转换请求参数为XML
//        String xml = XMLUtil.parseXML(param);
//
////        OkHttpClient client = new OkHttpClient();
////        Request requestOkhttp = new Request.Builder().url(PayUrl.URL)
////                .post(RequestBody.create(MediaType.parse("application/xml"), xml)).build();
////        Call call = client.newCall(requestOkhttp);
////        String result = call.execute().body().string();
//
//        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = null;
//        try {
//            wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder()
//                    .openid(StringUtils.isNotBlank(user.getOpenidMA())?user.getOpenidMA():user.getOpenidMP())
//                    .outTradeNo(param.)
//                    .totalFee(price)
//                    .body(URLDecoder.decode(name, "utf-8"))
//                    .tradeType(APPConstants.TradeTypeWX.JSAPI.getName())
//                    .spbillCreateIp(PaymentUtils.getLocalIP())
//                    .attach(attach.toString())
//                    .notifyUrl(wxNotifyURL)
//                    .build();
//        } catch (UnsupportedEncodingException e) {
//            e.printStackTrace();
//        }
//
//
//        //结果集
//        Map<String, String> resultMap = cn.enilu.flash.pay.weixin.util.XMLUtil.parseMap(result);
//        System.out.println("统一下单接口返回结果" + result);
//
//        //取得预付单id
//        if (resultMap.containsKey("result_code") && resultMap.containsKey("return_code") && resultMap.containsKey("prepay_id")) {
//            String return_code = resultMap.get("return_code");
//            String result_code = resultMap.get("result_code");
//            if ("SUCCESS".equals(result_code) && "SUCCESS".equals(return_code)) {
//                //取得prepare_id
//                String prepay_id = resultMap.get("prepay_id");
//
//                System.out.println("prepay_id:" + prepay_id);
//
//                SortedMap<String, Object> orderInfoMap = new TreeMap<>();
//
//                orderInfoMap.put("appid", resultMap.get("appid"));
//                orderInfoMap.put("partnerid", resultMap.get("mch_id"));
//
//                orderInfoMap.put("prepayid", prepay_id);
//                orderInfoMap.put("noncestr", cn.enilu.flash.pay.weixin.util.WxToolUtil.getNonce_str());
//                orderInfoMap.put("package", "Sign=WXPay");
//                orderInfoMap.put("timestamp", cn.enilu.flash.pay.weixin.util.WxToolUtil.getTimestamp());
//
//                String sign2 = SignCreateUtil.createSign(security, orderInfoMap);
//
//                orderInfoMap.put("sign", sign2);
//
//                return orderInfoMap;
//            }
//        }
//
//        throw new RuntimeException("支付失败");
//    }
//
//
//    /**
//     * 验证回调签名
//     *
//     * @return
//     */
//    public static boolean isTenpaySign(Map<String, String> map, String security) {
//        String characterEncoding = "utf-8";
//        String charset = "utf-8";
//        String signFromAPIResponse = map.get("sign");
//        if (signFromAPIResponse == null || signFromAPIResponse.equals("")) {
//            System.out.println("API返回的数据签名数据不存在，有可能被第三方篡改!!!");
//            return false;
//        }
//
//        System.out.println("服务器回包里面的签名是:" + signFromAPIResponse);
//
//        //过滤空 设置 TreeMap
//        SortedMap<String, String> packageParams = new TreeMap();
//
//        for (String parameter : map.keySet()) {
//            String parameterValue = map.get(parameter);
//            String v = "";
//            if (null != parameterValue) {
//                v = parameterValue.trim();
//            }
//            packageParams.put(parameter, v);
//        }
//
//        StringBuffer sb = new StringBuffer();
//        Set es = packageParams.entrySet();
//        Iterator it = es.iterator();
//
//        while (it.hasNext()) {
//            Map.Entry entry = (Map.Entry) it.next();
//            String k = (String) entry.getKey();
//            String v = (String) entry.getValue();
//            if (!"sign".equals(k) && null != v && !"".equals(v)) {
//                sb.append(k + "=" + v + "&");
//            }
//        }
//        // TODO: 2019/1/25 微信支付的key
//        sb.append("key=" + security);
//
//        //将API返回的数据根据用签名算法进行计算新的签名，用来跟API返回的签名进行比较
//        //算出签名
//        String resultSign = "";
//        String tobesign = sb.toString();
//
//        if (null == charset || "".equals(charset)) {
//            resultSign = cn.enilu.flash.pay.weixin.util.MD5.encode(tobesign).toUpperCase();
//        } else {
//            try {
//                resultSign = cn.enilu.flash.pay.weixin.util.MD5.encode(tobesign).toUpperCase();
//            } catch (Exception e) {
//                resultSign = cn.enilu.flash.pay.weixin.util.MD5.encode(tobesign).toUpperCase();
//            }
//        }
//
//        String tenpaySign = packageParams.get("sign").toUpperCase();
//        return tenpaySign.equals(resultSign);
//    }
//}
